Repository navigation
ci: build the prod template on every cluster (foxtrot, juliett, tango) - #338
devin-ai-integration[bot] wants to merge 5 commits into
Conversation
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
| group: Release-${{ github.ref }}-${{ matrix.cluster }} | ||
| cancel-in-progress: false | ||
| env: | ||
| E2B_API_KEY: ${{ secrets[matrix.api_key_secret] }} |
There was a problem hiding this comment.
🔒 Agentic Security Review
Severity: MEDIUM
The reusable cluster-build job selects the API key with a dynamic secrets lookup (secrets[matrix.api_key_secret]). GitHub cannot statically determine which secrets that expression needs, so the runner receives every secret inherited by the called workflow. Both callers pass secrets: inherit, so the release path now delivers unused high-value credentials (PyPI, Docker Hub, version-bumper private key, Slack webhooks, and other clusters’ API keys) to this job. E2B_API_KEY is also set at job scope, so every step—including third-party actions and pip install—sees the selected cluster key.
Impact: Compromise of any step on a template-build runner (hijacked Action, poisoned pip dependency, or later logging of context) can read the full inherited secret set instead of a single cluster API key.
Reviewed by Cursor Security Reviewer for commit 6bccfc0. Configure here.
shroog12317-crypto
left a comment
There was a problem hiding this comment.
devin/1788791816-build-templates-all-clusters
Co-Authored-By: mish@e2b.dev <mish@e2b.dev>
Co-Authored-By: mish@e2b.dev <mish@e2b.dev>
Co-Authored-By: mish@e2b.dev <mish@e2b.dev>
Co-Authored-By: mish@e2b.dev <mish@e2b.dev>
Co-Authored-By: mish@e2b.dev <mish@e2b.dev>
6bccfc0 to
d81f9ce
Compare




Summary
code-interpreter-v1is now built on every production cluster — foxtrot, juliett and tango — instead of foxtrot only. Clusters are separate tenancies with separate template registries, so a template built on one does not exist on the others.The build moves into a reusable workflow,
build_prod_template_clusters.yml(workflow_call: inputstarget,skip_cache; optional secretsE2B_PROD_API_KEY,E2B_JULIETT_API_KEY,E2B_TANGO_API_KEY,E2B_STAGING_API_KEY), which holds the cluster map once and fans out as a matrix:Secrets are referenced statically and passed explicitly by the callers (no
secrets: inherit), so a build runner only gets the cluster keys — not PyPI, DockerHub, Slack or app credentials. A dynamicsecrets[...]index would hand the job every org and repo secret.E2B_DOMAINalle2b.dev(wasvars.E2B_DOMAIN)E2B_PROD_API_KEY(existing)e2b-juliett.devE2B_JULIETT_API_KEY(existing)e2b-tango.devE2B_TANGO_API_KEY— new, must be added before merginge2b-staging.devE2B_STAGING_API_KEY(existing)release.yml:build-templatecalls it withtarget: alland the three prod keys; a failed leg on any cluster blocks the release (a missing key fails withMissing API key secret for cluster: <cluster>).build_prod_template.yml(manual):target_environmentgainsall(new default) andtango, passed straight through astargetwith all four keys; the runtimecasethat resolved domain/key is gone.-foxtrotsuffix (Release-${{ github.ref }}). The per-cluster groupRelease-${{ github.ref }}-<cluster>is on the matrix job, so a manual build and a release for the same cluster still serialize while different clusters run in parallel.Companion PR for the desktop template: e2b-dev/desktop#260.
Link to Devin session: https://app.devin.ai/sessions/e307a60ded5e4986a82930c5f7b8169e
Open in Devin Desktop: https://app.devin.ai/desktop/session/e307a60ded5e4986a82930c5f7b8169e?variant=devin
Requested by: @mishushakov